package com.crm.service.returnMoney;

import com.crm.model.entity.returnMoney.BankFlow;
import com.crm.model.entity.returnMoney.BankFlowRecord;
import com.crm.model.qo.returnMoney.BankFlowQO;
import com.crm.model.vo.returnMoney.*;

import java.math.BigDecimal;
import java.util.List;

/**
 * @author yuanyunfeng
 * @date 2021/7/26 11:04
 */
public interface BankFlowDbService {


    /**
     * 根据交易流水号+交易日期 查询数据库是否存在
     * @param transactionNo
     * @param transactionDate
     * @param creditMoney
     * @return
     */
    boolean existTransactioNo(String transactionNo, String transactionDate, String creditMoney);


    /**
     * 根据所属分公司、客户名称 查询产品订单表
     * @param companyId
     * @param customerName
     * @return
     */
    List<ProductOrderInfoVO> selectProductOrderId(String companyId, String customerName);


    /**
     * 导入数据库
     * @param bankFlow
     * @return
     */
    int insertBankFlow(BankFlow bankFlow);






    /**
     * 根据交易流水号查询银行流水表
     * @param transactionNo
     * @param transactionDate
     * @param creditMoney
     * @return
     */
    BankFlow queryByTransactionNo(String transactionNo,String transactionDate, BigDecimal creditMoney);


    /**
     * 银行流水关联记录表新增记录
     * @param record
     */
    void insertBankFlowRecord(BankFlowRecord record);


    /**
     * 更新银行流水表的关联状态
     * @param bankFlow
     */
    void updateRelationState(BankFlow bankFlow);


    /**
     * 取消上传（删掉断点之后的数据）
     * @param accountId
     * @param batchNo
     * @param readRow
     * @return
     */
    int cancelUpload(String accountId, Integer batchNo, Integer readRow);


    /**
     * 获取数据库到款日期字段
     * @return
     */
    int getReturnMoneyDayNum();


    /**
     * 查询银行流水列表
     * @param currentCompanyId
     * @param bankFlowQO
     * @return
     */
    List<BankFlowQueryVO> queryBankList(String currentCompanyId, BankFlowQO bankFlowQO);


    /**
     * 查询当月导入总金额、可用总金额
     *
     * @param createPeopleId
     * @param queryYear
     * @param queryMonth
     * @return
     */
    BankFlowDataVO queryMonthMoney(String createPeopleId, String queryYear, String queryMonth);


    /**
     * 根据流水表主键查询当前流水关联明细
     * @param flowId
     * @return
     */
    List<BankFlowRelateVO> queryBankRelatedByFlowId(String flowId);


    /**
     * 当前流水的关联的订单回款操作记录
     * @param flowId
     * @param orderNumber
     * @return
     */
    List<BankFlowReturnLogVO> queryOperatorLog(String flowId, String orderNumber);


    /**
     * @author  yuanyunfeng
     * @Description 当前流水关联的客户充值操作记录
     * @date  2021/11/11 15:22
     * @Param [flowId, payNumber]
     * @return java.util.List<com.crm.model.vo.returnMoney.BankFlowReturnLogVO>
     **/
    List<BankFlowReturnLogVO> queryCustomerPayLog(String flowId, String payNumber);

    /**
     * 修改
     * @Param bankFlow
     * @Author xielinqi
     * @Date 10:19 上午 2021/11/4
     */
    int updateByPrimaryKeySelective(BankFlow bankFlow);

    /**
     * 根据订单编号查询关联的流水、回款记录
     * @param flowId
     * @param orderNumber
     * @return
     */
    List<BankOrderReturn> queryReturnMoney(String flowId, String orderNumber);

    /**
     * @author  yuanyunfeng
     * @Description 查询当前充值编号关联的回款记录
     * @date  2021/11/12 13:06
     * @Param [flowId, payNumber]
     * @return java.util.List<com.crm.model.vo.returnMoney.BankOrderReturn>
     **/
    List<BankOrderReturn> queryPayMoney(String flowId, String payNumber);

    /**
     * 根据主键查询
     * @param flowId
     * @return
     */
    BankFlow selectByFlowId(String flowId);


    /**
     * 根据订单编号查询订单id
     * @param orderNumber
     * @return
     */
    String queryOrderId(String orderNumber);


    /**
     * @author  yuanyunfeng
     * @Description 删除流水记录
     * @date  2021/11/17 17:21
     * @Param [flowId]
     * @return boolean
     **/
    boolean deleteByFlowId(String flowId);

    /**
     * 根据流水号、公司查询流水信息
     * @param serial
     * @param companyId
     * @return
     */
    List<BankFlow> selectByTransactionNo(String serial, String companyId);


    /**
     * 通过订单编号的公司，流水号查询流水可用余额
     * @param serial
     * @param companyId
     * @return
     */
    BigDecimal selectCountAvailableAmount(String serial, String companyId);


    /**
     * @author  yuanyunfeng
     * @Description 操作记录（调减类型）
     * @date  2021/12/1 14:11
     * @Param [flowId]
     * @return java.util.List<com.crm.model.vo.returnMoney.BankFlowReturnLogVO>
     **/
    List<BankFlowReturnLogVO> querySubAvailableAmount(String flowId);
}
